import 'dart:async';
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:get/get.dart';

// 导入健康评分页面逻辑以更新状态
import '../Home/health_score_logic.dart';

/// 安全检测逻辑控制器
/// 负责：检测进度、检测结果、状态切换与动画控制
class SecurityScanLogic extends GetxController {
  /// 是否处于检测中
  final RxBool isScanning = true.obs;
  
  /// 是否展示完成页
  final RxBool showResult = false.obs;
  
  /// 检测进度（0~1）用于驱动进度条动画
  final RxDouble progress = 0.0.obs;
  
  /// 当前检测项目名称
  final RxString currentScanItem = '正在初始化...'.obs;
  
  /// 检测结果状态（安全/有风险）
  final RxString scanResult = '安全'.obs;
  
  /// 检测结果描述
  final RxString resultDescription = ''.obs;
  
  /// 发现的风险数量
  final RxInt riskCount = 0.obs;
  
  /// 检测项目列表
  final List<String> scanItems = [
    '检查系统权限',
    '扫描应用安全',
    '检测网络连接',
    '验证数据加密',
    '检查隐私设置',
    '分析系统漏洞',
    '评估安全风险'
  ];
  
  Timer? _timer;

  @override
  void onReady() {
    super.onReady();
    startSecurityScan();
  }

  /// 启动安全检测流程
  void startSecurityScan() {
    isScanning.value = true;
    showResult.value = false;
    progress.value = 0.0;
    riskCount.value = 0;
    currentScanItem.value = '正在初始化...';
    
    int tick = 0;
    final rand = Random();
    const totalTicks = 100; // 总共100个tick完成检测
    
    _timer?.cancel();
    _timer = Timer.periodic(const Duration(milliseconds: 80), (t) {
      tick++;
      
      // 更新进度
      final double next = (tick / totalTicks).clamp(0.0, 1.0);
      progress.value = next;
      
      // 更新当前检测项目
      final itemIndex = (progress.value * (scanItems.length - 1)).floor();
      if (itemIndex < scanItems.length) {
        currentScanItem.value = scanItems[itemIndex];
      }
      
      // 模拟发现风险（随机生成）
      if (tick % 15 == 0 && rand.nextDouble() > 0.7) {
        riskCount.value += rand.nextInt(2) + 1;
      }
      
      // 检测完成
      if (progress.value >= 1.0) {
        t.cancel();
        _showScanResult();
      }
    });
  }

  /// 显示检测结果
  void _showScanResult() {
    isScanning.value = false;
    showResult.value = true;
    
    // 根据风险数量确定结果
    String resultStatus;
    if (riskCount.value == 0) {
      resultStatus = '安全';
      scanResult.value = resultStatus;
      resultDescription.value = '您的设备安全状况良好，未发现明显的安全风险。建议继续保持良好的使用习惯。';
    } else if (riskCount.value <= 2) {
      resultStatus = '低风险';
      scanResult.value = resultStatus;
      resultDescription.value = '发现${riskCount.value}个低风险问题，建议及时处理以提升设备安全性。';
    } else {
      resultStatus = '有风险';
      scanResult.value = resultStatus;
      resultDescription.value = '发现${riskCount.value}个安全风险，建议立即处理以确保设备安全。';
    }
    
    // 更新健康评分页面的安全状态
    _updateHealthScoreSecurityStatus(resultStatus);
  }
  
  /// 更新健康评分页面的安全状态
  void _updateHealthScoreSecurityStatus(String status) {
    try {
      // 获取健康评分页面的控制器
      final healthScoreLogic = Get.find<HealthScoreLogic>();
      healthScoreLogic.securityStatus.value = status;
    } catch (e) {
      // 如果找不到控制器，可能是页面未加载，忽略错误
      // 生产环境中不打印日志
    }
  }
  
  /// 获取结果颜色
  Color getResultColor() {
    switch (scanResult.value) {
      case '安全':
        return Colors.green;
      case '低风险':
        return Colors.orange;
      case '有风险':
        return Colors.red;
      default:
        return Colors.grey;
    }
  }
  
  /// 获取详细的风险说明
  List<String> getRiskDetails() {
    final details = <String>[];
    
    if (riskCount.value > 0) {
      if (riskCount.value >= 1) {
        details.add('• 发现${riskCount.value}个应用存在权限滥用风险');
      }
      if (riskCount.value >= 2) {
        details.add('• 检测到网络连接存在潜在安全风险');
      }
      if (riskCount.value >= 3) {
        details.add('• 系统隐私设置需要优化');
      }
      if (riskCount.value >= 4) {
        details.add('• 发现数据加密强度不足');
      }
    } else {
      details.add('• 系统权限配置合理');
      details.add('• 应用安全状况良好');
      details.add('• 网络连接安全可靠');
      details.add('• 隐私设置保护完善');
    }
    
    return details;
  }
  
  /// 重新检测
  void rescan() {
    // 重置状态
    isScanning.value = true;
    showResult.value = false;
    progress.value = 0.0;
    riskCount.value = 0;
    currentScanItem.value = '正在初始化...';
    
    // 启动新的检测
    startSecurityScan();
  }

  @override
  void onClose() {
    _timer?.cancel();
    super.onClose();
  }
}